package com.fy56.platform.logistics.service.wx;

import com.fy56.platform.logistics.common.Page;
import com.fy56.platform.logistics.common.ResultModel;
import com.fy56.platform.logistics.model.Company;
import com.fy56.platform.logistics.model.Order;

import java.util.List;
import java.util.Map;

/**
 * Created by lml on 2018/2/25.
 */
public interface IOrderService extends IBaseSlaveService<Order> {
    Integer updateById( Order order);
    Integer deleteById(Order order);
    Integer updateUploadFlag(Order order);
    Integer save(Order order);
    Page<Map<String, Object>> queryOrderList(Map<String, Object> params);

    /**
     * 根据金融代码和用户ID获得下单的基本信息
     * 1.目的地
     * 2.业务相关设置 : 小程序代收是否必须输入银行信息
     * 3.业务相关设置 : 小程序有代收货款必须与默认开户银行一致
     * 4.业务相关设置 : 默认银行
     * 5.业务相关设置 : 配送（提货）方式
     * 6.默认的付款方式
     * 7.默认的配送（提货）方式
     * 8.付款方式
     * 9.包装样式
     * 10.发货人
     * 11.默认发货人
     * 12.收货人
     * 13.默认收货人
     * 14.寄件网点（从认证中心获取的子公司信息）
     * 15.银行信息
     *
     * @param code 金融代码
     * @param userId 用户ID
     * @param latitude 纬度
     * @param longitude 经度
     * @return
     */
    Map<String, Object> getOrderBaseInfo(String code, Long userId, String latitude, String longitude, String openId, Company company);

    /**
     * 根据发货人手机号和金融代码获取一卡通信息
     *
     * @param code
     * @param mobile
     * @return
     */
    ResultModel getVipCardInfo(String code, String mobile);

    /**
     * 根据发货人手机号和金融代码获取一卡通信息
     *
     * @param code
     * @param vipCardNo
     * @return
     */
    ResultModel getVipCardInfo2(String code, String vipCardNo);

    /**
     * 小程序主页订单信息
     *
     * @param code 金融代码
     * @param userId 当前请求的用户ID
     * @param senderMobile 发货人手机
     * @return
     * @throws Exception
     */
    List<Order> searchOrderForIndex(String code,String userId,String senderMobile) throws Exception;

    /**
     * 小程序主页公版订单信息
     *
     * @param code 金融代码
     * @param userId 当前请求的用户ID
     * @param senderMobile 发货人手机
     * @return
     * @throws Exception
     */
    List<Order> searchOrderPubVersionForIndex(String code,String userId,String senderMobile) throws Exception;

    /**
     * 同步预受理单至BS和F6服务
     *
     * @param order
     */
    String syncPreOrder(Order order);

    /**
     * 小程序运单详情（已处理时，根据票号查询业务系统的订单数据，未处理查询预受理单数据）
     *
     * @param code 金融代码
     * @param id 预受理单ID
     * @param orderNo 正式订单票号
     * @return
     * @throws Exception
     */
    Object getOrderInfo(String code, String id, String orderNo, String orderBillMasterId) throws Exception;

    /**
     * 获取开票地点
     *
     * @param code
     * @param longitude
     * @param latitude
     * @return
     * @throws Exception
     */
    List<Map<String,Object>> getPlaceOfLoadingList(String code,String longitude,String latitude) throws Exception;

    /**
     * 我的运单（已受理）：从F6或BS服务端获取最新的10条正式订单
     * 参数说明：
     * 1. code 金融代码
     * 2. userId 当前请求的用户ID
     * 3. mobile 手机号
     * 4. flag 手机类型(0：该手机号只作为发货人手机；1：该手机号作为收货人手机；2：该手机号作为发货人或者收货人手机)
     * 5. currentPage 当前页数
     * 6. pageSize 每页显示个数
     * 7. startDate 开始日期 默认一个月
     * 8. endDate 结束日期 默认一个月
     * @return
     * @throws Exception
     */
    List<Order> getOrderListFromBusinessSys(Map<String,Object> params) throws Exception;

    /**
     * 我的运单（未受理）：从F6或BS服务端获取最新的10条预受理单
     * 参数说明：
     * 1. code 金融代码
     * 2. userId 当前请求的用户ID
     * 3. currentPage 当前页数
     * 4. pageSize 每页显示个数
     * 5. startDate 开始日期 默认一个月
     * 6. endDate 结束日期 默认一个月
     * @return
     * @throws Exception
     */
    List<Order> getPreOrderListFromBusinessSys(Map<String, Object> params) throws Exception;

    /**
     * 我的运单：定制版
     *
     * @return
     * @throws Exception
     */
    List<Order> getAllOrderListFromBusinessSys(Map<String, Object> params) throws Exception;

    /**
     * 我的运单
     *
     * @return
     * @throws Exception
     */
    List<Order> getMyAllOrderList(Map<String, Object> params) throws Exception;

    /**
     * 查件（代收平台）
     *
     * @return
     * @throws Exception
     */
    List<Order> getGoodsTraceList(String code,String mobile,int flag) throws Exception;


    Map<String, Object>  getGoodsTraceListNew(String code,String mobile,int flag) throws Exception;

    /**
     *
     * @param code
     * @param orderBillMasterId
     * @return
     */
    Map<String, Object> getOrderF6PayStateInfomaction(String code, String orderBillMasterId);

    /**
     * 删除“非转正式订单”(删除generate_flag生成货运单标识为不等于1的“非转正式订单”）
     *
     * @param order
     * @return
     */
    Integer deleteNotRegularById(Order order);

    Order selectById(Long id) throws Exception;

    /**
     * 获取-常用货物名
     * @param code 金融代码
     * @return
     * @throws Exception
     */
    List<String> getGoodsNameInfoBSOrF6(String code,Company company) throws Exception;

    /**
     * F6 查询运货单数据列表
     * @param params
     * @return
     * @throws Exception
     */
    ResultModel searchOrderNumberList(Map<String, Object> params) throws Exception;


}
